package com.tf_cut.admin.person.controller;

import com.alibaba.fastjson.JSON;
import com.tf_cut.admin.backend.api.BackEndApi;
import com.tf_cut.admin.common.pojo.PageInfo;
import com.tf_cut.admin.common.pojo.Result;
import com.tf_cut.admin.person.vo.PersonAndAccountVo;
import com.tf_cut.admin.person.vo.PersonBillAndConsigneeVo;
import lombok.extern.slf4j.Slf4j;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.StringUtils;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;


@RestController
@RequestMapping("/person/info")
@Slf4j
public class PersonInfoController {

    @Autowired
    private BackEndApi personInfoApi;
    
	@Value("${mobile.upload.path}")
	private String filePath;

    // 进入商户清单页面
    @GetMapping("list")
    public ModelAndView sellerList() {
        return new ModelAndView("person/info/list", "personInfo", null);
    }

    // 进入新增商户页面
    @GetMapping("sellerinsert")
    public ModelAndView sellerInsert() {
        return new ModelAndView("seller/sellerinsert", "seller", null);
    }
    
    // 进入个人认证驳回页面
    @GetMapping("personInforefuse")
    public ModelAndView personInforefuse(String personId) {
        return new ModelAndView("person/info/personInforefuse", "personId", personId);
    }

    // 进入新增商户页面
    @GetMapping("sellerimport")
    public ModelAndView sellerImport() {
        return new ModelAndView("seller/sellerimport", "seller", null);
    }

    /**
     * 查询个人认证列表
     *
     * @param personAndAccountVo
     * @return
     */
    @PostMapping(value = "list/page")
    public Result<PageInfo<PersonBillAndConsigneeVo>> queryPersonBillList(PersonAndAccountVo personAndAccountVo) {
        String json = JSON.toJSONString(personAndAccountVo);
        json = personInfoApi.queryPersonInfoList(json);
        return Result.of(JSON.parseObject(json, PageInfo.class));
    }

    @PostMapping("dealPersonInfo")
    public Result<PersonAndAccountVo> dealSellerInfo(PersonAndAccountVo avo) {
        String rtnJson;
        Result<PersonAndAccountVo> result;
        if(StringUtils.isNoneBlank(avo.getCardStatus())) {
            try {
                rtnJson = personInfoApi.updatepersonmobileInfo(JSON.toJSONString(avo));
                result = JSON.parseObject(rtnJson, Result.class);
            } catch (Exception e) {
                log.error(e.getMessage(),e);
                avo.setPersonId(null);
                result = Result.of(avo);
                result.setFlag(false);
            }
        }else {
            Result<PersonAndAccountVo> result2 = Result.of(null);
            result2.setMsg("操作参数必传！");
            result2.setFlag(false);
            return result2;
        }
        return result;
    }
    
    
    @RequestMapping(value = "/downAgree")
	public void downAgree(HttpServletResponse response, HttpServletRequest request, String personId) throws Exception {
		String json = personInfoApi.queryByPersonId(personId);
		PersonAndAccountVo personAndAccountVo= JSON.parseObject(json,PersonAndAccountVo.class);
		SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		XWPFDocument doc = new XWPFDocument();// 创建Word文件
		XWPFParagraph p = doc.createParagraph();// 新建段落
		p.setAlignment(ParagraphAlignment.CENTER);// 设置段落的对齐方式
		XWPFRun r = p.createRun();// 创建标题
		r.setText("共享经济服务协议");
		r.setBold(true);// 设置为粗体
		r.setColor("000000");// 设置颜色
		r.setFontSize(16); // 设置字体大小
		r.addCarriageReturn();// 回车换行
		XWPFParagraph p1 = doc.createParagraph();
		p1.setAlignment(ParagraphAlignment.BOTH);
		p1.setSpacingBetween(2.0);// 字距调整----这个好像没有效果

		XWPFRun c1 = p1.createRun();
		c1.setText("重要提示");
		c1.setColor("000000");
		c1.setFontSize(11);
		c1.addCarriageReturn();
		c1.addCarriageReturn();
		c1.setText("欢迎使用共享经济服务，为了保障您的权益，请在使用本服务之前，详细阅读此《“信易达”共享经济服务协议》（以下简称“本协议”）所有内容，特别是加粗部分。");
		c1.addCarriageReturn();
		c1.addCarriageReturn();
		c1.setText("本协议自您签字确认之日起生效，您签字确认视为您同意开通平台服务并同意接受本协议的约束。");
		c1.setBold(false);// 设置为粗体
		c1.setFontFamily("楷体");// 字体
		c1.addCarriageReturn();
		c1.addCarriageReturn();

		XWPFRun c2 = p1.createRun();
		c2.setText("第一条 服务协议的接受和修订");
		c2.addCarriageReturn();
		c2.setText(
				"1.1 本协议内容包括协议正文、共享经济平台及信易达公司已经发布的或将来可能发布/更新的各类规则。所有规则均为本协议不可分割的组成部分，与协议正文具有同等法律效力，本协议正文与前述规则存在冲突的，以本协议正文为准。本协议正文未作规定的事项，以前述规则的约定为准。");
		c2.addCarriageReturn();
		c2.setText(
				"1.2 本协议及相关条款如由于业务发展需要进行修订的，您可前往查阅最新版协议条款。在信易达公司修改上述条款后，如果您不接受修改后的条款，您可以选择终止使用本服务。您继续使用本服务的，将被视为已接受了修改后的协议。");
		c2.addCarriageReturn();
		c2.addCarriageReturn();
		c2.setFontSize(11);
		c2.setFontFamily("楷体");// 字体
		c2.setBold(true);// 设置为粗体
		c2.addCarriageReturn();
		c2.addCarriageReturn();

		XWPFRun c3 = p1.createRun();
		c3.setText("第二条 定义");
		c3.addCarriageReturn();
		c3.setText("2.1 共享经济平台：指“信易达”共享经济平台。平台的所有权、运营权以及制度和活动的制订权均归信易达公司所有，信易达公司在法律规定的范围内拥有解释权。");
		c3.addCarriageReturn();
		c3.setText("2.2  信易达公司：指信易达（北京）科技有限公司。");
		c3.addCarriageReturn();
		c3.setText("2.3 “用户”或“您”“本人”：指享受信易达公司提供共享经济服务的自然人。");
		c3.setBold(false);// 设置为粗体
		c3.setFontSize(11);
		c3.setFontFamily("楷体");// 字体
		c3.addCarriageReturn();
		c3.addCarriageReturn();
		XWPFRun c4 = p1.createRun();
		c4.setText("第三条 信易达服务内容");
		c4.setFontSize(11);
		c4.setFontFamily("楷体");// 字体
		c4.setBold(true);// 设置为粗体
		c4.addCarriageReturn();
		XWPFRun c5 = p1.createRun();
		c5.setText("3.1信易达公司通过平台为您提供共享经济平台服务，您在成为平台会员后可依本协议进行接单、具体接单内容以平台发包需方提供的为准。");
		c5.addCarriageReturn();
		c5.setText(
				"3.2平台发包需方通过共享经济平台向您结算费用，平台发包需方已委托并授权信易达公司指定的分公司、子公司或其他关联公司按照有关税收政策规定及主管税务机关的要求及授权，结算您应缴纳的增值税及税金附加、个人所得税及行政收费（如适用），平台发包需方通过共享经济平台向您结算的费用在扣除您应缴纳的税费后，剩余款项由信易达公司指定的信易达公司分公司、子公司或其他关联公司向您足额支付，您指定收款账户信息为开通本服务已经录入的相关信息为准。同时，信易达公司指定的分公司、子公司或其他关联公司将按照法律法规及税务部门的许可向发包需方开具相应发票。您同意上述有关费用结算、发票开具及费用支付的全部安排。");
		c5.addCarriageReturn();
		c5.setText("3.3 信易达公司承诺对您所披露的涉及个人隐私信息进行保密并尽一切合理努力采取必要的保密措施。");
		c5.addCarriageReturn();
		c5.setText("3.4您可自行在需方查询费用的计算方式、支付途径等信息，如有异议，可直接与平台发包需方沟通，信易达公司将视情况需要可提供相关协助。");
		c5.addCarriageReturn();
		c5.setText("3.5您应自备提供生产经营活动所需要的设备设施、自行承担提供生产经营活动的必要费用。");
		c5.setFontSize(11);
		c5.setFontFamily("楷体");// 字体
		c5.setBold(false);// 设置为粗体
		c5.addCarriageReturn();
		XWPFRun c6 = p1.createRun();
		c6.setText("3.6您应自行判断是否接单，您与发包需方之间关于接单、服务提供及具体费用金额的确定均由您自行与发包需方协商确定，信易达公司及下属子公司、分公司均不参与。");
		c6.addCarriageReturn();
		c6.addCarriageReturn();
		c6.setText("四、责任声明");
		c6.setFontSize(11);
		c6.setFontFamily("楷体");// 字体
		c6.setBold(true);// 设置为粗体
		c6.addCarriageReturn();
		XWPFRun c7 = p1.createRun();
		c7.setText("4.1 您自行约定与平台发包需方的交易方式及法律关系，");
		c7.setFontSize(11);
		c7.setFontFamily("楷体");// 字体
		c7.setBold(false);// 设置为粗体
		XWPFRun c8 = p1.createRun();
		c8.setText("如因此产生争议纠纷的，由您自行处理，与信易达公司及其指定完成服务的信易达公司分公司、子公司及其他关联公司无关。");
		c8.setFontSize(11);
		c8.setFontFamily("楷体");// 字体
		c8.setBold(true);// 设置为粗体
		c8.addCarriageReturn();
		XWPFRun c9 = p1.createRun();
		c9.setText("4.2 您应保证所提供的信息均是真实的、有效的、合法的，");
		c9.setFontSize(11);
		c9.setFontFamily("楷体");// 字体
		c9.setBold(false);// 设置为粗体
		XWPFRun a1 = p1.createRun();
		a1.setText("如信息变更（例如，不再是自由职业者身份时）");
		a1.setFontSize(11);
		a1.setFontFamily("楷体");// 字体
		a1.setBold(true);// 设置为粗体
		XWPFRun a2 = p1.createRun();
		a2.setText("应当及时通知信易达公司，与此有关的全部法律责任由您负责。");
		a2.setFontSize(11);
		a2.setFontFamily("楷体");// 字体
		a2.setBold(false);// 设置为粗体
		a2.addCarriageReturn();
		XWPFRun a3 = p1.createRun();
		a3.setText("4.3您同意信易达公司收集您的个人信息，包括但不限于姓名、身份证号、收款账户信息、接单数量及费用等。");
		a3.addCarriageReturn();
		a3.setText("4.4您应确保在使用共享经济平台的活动过程中遵守国家法律法规，如因您个人原因造成其个人或任何第三方损害的责任，由您自行承担全部法律责任。");
		a3.setFontSize(11);
		a3.setFontFamily("楷体");// 字体
		a3.setBold(true);// 设置为粗体
		a3.addCarriageReturn();
		XWPFRun a4 = p1.createRun();
		a4.setText("4.5您确认，您具有完全民事权利能力及完全民事行为能力，并满足所有履行本协议所需的法定条件或约定条件。");
		a4.setFontSize(11);
		a4.setFontFamily("楷体");// 字体
		a4.setBold(false);// 设置为粗体
		a4.addCarriageReturn();
		XWPFRun a5 = p1.createRun();
		a5.setText(
				"4.6 您确认，您与信易达公司及信易达公司指定的为您提供结算、支付及委托代征的信易达公司分公司、子公司或其他关联公司并不存在从属关系、劳动关系、劳务关系、雇佣关系、合伙关系、代理关系等非平台服务合同关系。任何情况下，您不得因本协议主张与信易达公司及信易达公司指定的为您提供结算、支付及委托代征服务的信易达公司分公司、子公司或其他关联公司存在平台服务关系之外的债权债务关系。");
		a5.addCarriageReturn();
		a5.addCarriageReturn();
		a5.setText("五、协议解除");
		a5.setFontSize(11);
		a5.setFontFamily("楷体");// 字体
		a5.setBold(true);// 设置为粗体
		a5.addCarriageReturn();
		XWPFRun a6 = p1.createRun();
		a6.setText("5.1经信易达公司与您协商一致的，可以变更或提前终止本协议。");
		a6.setFontSize(11);
		a6.setFontFamily("楷体");// 字体
		a6.setBold(false);// 设置为粗体
		a6.addCarriageReturn();
		XWPFRun a7 = p1.createRun();
		a7.setText("5.2如因国家政策或税务部门政策等调整，信易达认为有必要解除本协议的，您认可并同意信易达公司可无条件解除本协议。");
		a7.addCarriageReturn();
		a7.setText("5.3出现以下情形之一的，信易达可以随时解除本协议，并有权要求您承担相应违约责任，赔偿相应损失：");
		a7.addCarriageReturn();
		a7.setText("（1）您在使用平台服务存在严重损害信易达公司利益的活动的；");
		a7.setFontSize(11);
		a7.setFontFamily("楷体");// 字体
		a7.setBold(true);// 设置为粗体
		a7.addCarriageReturn();
		XWPFRun a8 = p1.createRun();
		a8.setText("5.4因不可抗力因素致使无法实现合同目的，信易达公司或您均可解除本协议。");
		a8.setFontSize(11);
		a8.setFontFamily("楷体");// 字体
		a8.setBold(false);// 设置为粗体
		a8.addCarriageReturn();
		XWPFRun a9 = p1.createRun();
		a9.setText("六、其他约定");
		a9.setFontSize(11);
		a9.setFontFamily("楷体");// 字体
		a9.setBold(true);// 设置为粗体
		a9.addCarriageReturn();
		XWPFRun b1 = p1.createRun();
		b1.setText("6.1本协议的订立、执行和解释及争议的解决均应适用中国法律。凡因本协议引起的或与本协议有关的任何争议，应友好协商解决。");
		b1.setFontSize(11);
		b1.setFontFamily("楷体");// 字体
		b1.setBold(false);// 设置为粗体
		XWPFRun b2 = p1.createRun();
		b2.setText("如不能协商解决，一致同意提交至报价经济贸易仲裁委员会根据其现行有效的仲裁规则进行仲裁，仲裁地点在北京。仲裁裁决是终局的，对双方都有约束力。仲裁费用由败诉一方承担。");
		b2.addCarriageReturn();
		b2.setText("6.2信易达公司不行使、未能及时行使或者未充分行使本协议或者按照法律规定所享有的权利，不应被视为放弃该权利，也不影响信易达公司在将来行使该权利。");
		b2.addCarriageReturn();
		b2.setText("6.3如果您对本协议内容有任何无法接受之处，请您拒绝开通平台服务。");
		b2.setFontSize(11);
		b2.setFontFamily("楷体");
		b2.setBold(true);// 设置为粗体
		b2.addCarriageReturn();
		b2.addCarriageReturn();
		b2.addCarriageReturn();
		File picture = new File(filePath+personAndAccountVo.getSignImg());// 测试项目文件，正常调用时可以通过file对象传参
		InputStream in=new FileInputStream(picture);
		BufferedImage image=ImageIO.read(picture);
		b2.setText("本人签字:");
		b2.addPicture(in, org.apache.poi.xwpf.usermodel.Document.PICTURE_TYPE_PNG, "",
				Units.pixelToEMU(image.getWidth()), Units.pixelToEMU(image.getHeight()));
		b2.addCarriageReturn();
		b2.setText("身份证号码:"+personAndAccountVo.getCardCode());
		b2.addCarriageReturn();
		b2.setText("日期:"+format.format(personAndAccountVo.getUpdateTime()));
		b2.addCarriageReturn();

		String fileNameURL = URLEncoder.encode("自由职业者协议.doc", "UTF-8");
		response.setCharacterEncoding("UTF-8");
		// response.setHeader("Content-disposition", "attachment;filename=" +
		// fileName);
		response.setHeader("Content-disposition",
				"attachment;filename=" + fileNameURL + ";" + "filename*=utf-8''" + fileNameURL);
		response.setContentType("application/octet-stream");
		// 刷新缓冲
		response.flushBuffer();
		OutputStream ouputStream = response.getOutputStream();
		// workbook将Excel写入到response的输出流中，供页面下载该Excel文件
		doc.write(ouputStream);
		ouputStream.flush();
		ouputStream.close();
	}

}
